package com.jelica.videoteka.pages;

import java.util.Collection;

import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.annotations.Inject;

import com.jelica.videoteka.beans.Iznajmljivanje;
import com.jelica.videoteka.interfaces.IznajmljivanjeI;
import com.jelica.videoteka.interfaces.KorisnikI;
import com.jelica.videoteka.interfaces.PomocniKorisnikI;
import com.jelica.videoteka.interfaces.VideoI;
import com.jelica.videoteka.interfaces.VideotekarI;
import com.jelica.videoteka.service.IznajmljivanjesI;
import com.jelica.videoteka.service.KorisniksI;
import com.jelica.videoteka.service.VideosI;
import com.jelica.videoteka.service.VideotekarsI;


public class UnosIznajmljivanja {
	@SessionState
	private PomocniKorisnikI pomocniKorisnikI;

	private boolean pomocniKorisnikIExists;
	
	public PomocniKorisnikI getPomocniKorisnikI() {
		return pomocniKorisnikI;
	}
	
	Object onActivate() {
		if (!pomocniKorisnikIExists) return Login.class;
		return null;
	}
	
	
	@Persist
	private String iznajmljivanjeKorisnik;
	@Persist
	private String iznajmljivanjeVideotekar;
	@Persist
	private String iznajmljivanjeVideo;

	
	@InjectPage
	private PregledIznajmljivanje pogledajPregledIznajmljivanje;
	@InjectPage
	private PregledGreske pregledGreske;

	// HashMape za korisnike, videotekare, videa i iznajmljivanja
	@Inject
	private VideosI videos;
	@Inject
	private KorisniksI korisniks;
	@Inject
	private VideotekarsI videotekars;
	@Inject
	private IznajmljivanjesI iznajmljivanjes;

	// Za pregled videa
	public Collection<VideoI> getVideoI() {
		return videos.retrieve();
	}

	// Za pregled korisnika
	public Collection<KorisnikI> getKorisnikI() {
		return korisniks.retrieve();
	}

	// Za pregled videotekara
	public Collection<VideotekarI> getVideotekarI() {
		return videotekars.retrieve();
	}

	@OnEvent(value = "submit", component = "iznjamljivanjeInputForm")
	Object onFromSubmit() {
		
		
		VideoI video = null;
		KorisnikI korisnik = null;
		VideotekarI videotekar = null;

		try {
			korisnik = korisniks.retrieveJedanKorisnik(getIznajmljivanjeKorisnik());
			videotekar = videotekars
					.retrieveJedanVideotekar(getIznajmljivanjeVideotekar());
			video = videos.retrieveJedanVideo(getIznajmljivanjeVideo());
		} catch (Exception ex) {
			pregledGreske.setPassedMessage(ex.toString());
			return pregledGreske;
		}

		// Provjera detekcije objekata korisnika, videotekara, videa
		if (korisnik == null) {
			pregledGreske
					.setPassedMessage("Greska u prepoznavanju objekta Korisnik u Map-i");
			return pregledGreske;
		}
		if (videotekar == null) {
				pregledGreske
					.setPassedMessage("Greska u prepoznavanju objekta Videotekar u Map-i");
			return pregledGreske;
		}
		if (video == null) {
			pregledGreske
					.setPassedMessage("Greska u prepoznavanju objekta Videa u Map-i");
			return pregledGreske;
		}

		IznajmljivanjeI iznajmljivanjeIS = new Iznajmljivanje();
		iznajmljivanjeIS.executeBorrowCreation(korisnik, videotekar, video, iznajmljivanjes);

		this.iznajmljivanjeVideo = "";
		this.iznajmljivanjeVideotekar = "";
		this.iznajmljivanjeKorisnik = "";
		
		return pogledajPregledIznajmljivanje;
	}

	public String getIznajmljivanjeKorisnik() {
		return iznajmljivanjeKorisnik;
	}

	public void setIznajmljivanjeKorisnik(String iznajmljivanjeKorisnik) {
		this.iznajmljivanjeKorisnik = iznajmljivanjeKorisnik;
	}

	public String getIznajmljivanjeVideotekar() {
		return iznajmljivanjeVideotekar;
	}

	public void setIznajmljivanjeVideotekar(String iznajmljivanjeVideotekar) {
		this.iznajmljivanjeVideotekar = iznajmljivanjeVideotekar;
	}

	public String getIznajmljivanjeVideo() {
		return iznajmljivanjeVideo;
	}

	public void setIznajmljivanjeVideo(String iznajmljivanjeVideo) {
		this.iznajmljivanjeVideo = iznajmljivanjeVideo;
	}


	

}
